﻿//#include<stdio.h>
//#define MAX_VERTEX_NUM 20
//typedef struct
//{
//    int vertexNum;
//    char vertex[MAX_VERTEX_NUM];
//    int arc[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
//}Graph, * PGraph;
//void createdGraph(PGraph g)
//{
//    int i, j;
//    g->vertexNum = 6;
//    for (i = 0; i < g->vertexNum; i++)
//        g->vertex[i] = 'A' + i;
//    for (i = 0; i < g->vertexNum; i++)
//        for (j = 0; j < g->vertexNum; j++)
//            g->arc[i][j] = 0;
//    g->arc[0][1] = 1;
//    g->arc[0][2] = 1;
//    g->arc[0][3] = 1;
//    g->arc[1][4] = 1;
//    g->arc[2][1] = 1;
//    g->arc[2][4] = 1;
//    g->arc[4][3] = 1;
//    g->arc[4][5] = 1;
//}
//int main()
//{
//    Graph graph;
//    createdGraph(&graph);
//    TopologicalSort(&graph);
//}
//void TopologicalSort(PGraph g) {
//    int queue[MAX_VERTEX_NUM];//存放顶点的度
//    int front = 0, rear = 0;
//    int in_degree[MAX_VERTEX_NUM];
//    //printf("AAA");
//    for (int i = 0; i < g->vertexNum; i++)
//    {
//        in_degree[i] = 0;
//        //printf("%c入度:%d", g->vertex[i], in_degree[i]);
//    }
//    //第一步，统计入度
//    for (int i = 0; i < g->vertexNum; i++)
//    {
//        //printf("%c入度:%d", g->vertex[i], in_degree[i]);
//        for (int j = 0; j < g->vertexNum; j++)
//            if (g->arc[i][j] == 1)
//                in_degree[j]++;
//    }
//    //第二步，顶点入度为0入队
//    for (int i = 0; i < g->vertexNum; i++)
//        if (in_degree[i] == 0)
//            queue[rear++] = i;
//    //出队，并修改其他顶点的入度，并进行入队判断
//    while (front < rear)
//    {
//        int u = queue[front++];
//        printf("%c", g->vertex[u]);
//        printf("  ");
//        for (int v = 0; v < g->vertexNum; v++) {
//            if (g->arc[u][v]) {
//                in_degree[v]--;
//                if (in_degree[v] == 0)
//                    queue[rear++] = v;
//            }
//        }
//    }
//}